package service;

import entity.*;
import org.apache.shiro.crypto.RandomNumberGenerator;
import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;

/**
 * <p>User: Zhang Kaitao
 * <p>Date: 14-1-28
 * <p>Version: 1.0
 *
 * 在创建账户及修改密码时直接把生成密码操作委托给 PasswordHelper。
 */
public class PasswordHelper {

    /*用户的盐值 就是 一个 随机数 */
    private RandomNumberGenerator randomNumberGenerator = new SecureRandomNumberGenerator();

    //使用的加密算法
    private String algorithmName = "md5";
    //迭代次数
    private final int hashIterations = 2;

    public void encryptPassword(User user) {

        user.setSalt(randomNumberGenerator.nextBytes().toHex());

        /*使用简单加密算法把各个 要素 算成 密码
        * user.getCredentialsSalt() 即 :   return username + salt;
        * */
        String newPassword = new SimpleHash(
                algorithmName,
                user.getPassword(),
                ByteSource.Util.bytes(user.getCredentialsSalt()),
                hashIterations
        ).toHex();

        user.setPassword(newPassword);
    }
}
